import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

def verify_data(data_path):
    """验证数据加载和基本统计"""
    print("="*50)
    print("数据验证报告")
    print("="*50)
    
    # 加载数据
    try:
        df = pd.read_csv(data_path)
        print("\n✓ 数据加载成功")
    except Exception as e:
        print(f"\n✗ 数据加载失败: {str(e)}")
        return
    
    # 基本信息
    print("\n1. 数据基本信息:")
    print("-"*30)
    print(f"记录数: {len(df)}")
    print(f"特征数: {len(df.columns)}")
    print("\n列名和数据类型:")
    print(df.dtypes)
    
    # 缺失值检查
    print("\n2. 缺失值检查:")
    print("-"*30)
    missing = df.isnull().sum()
    if missing.sum() > 0:
        print("发现缺失值:")
        print(missing[missing > 0])
    else:
        print("✓ 没有缺失值")
    
    # 基本统计
    print("\n3. 数值特征统计:")
    print("-"*30)
    print(df.describe())
    
    # 异常值分布
    print("\n4. 异常样本分布:")
    print("-"*30)
    anomaly_dist = df['has_anomaly'].value_counts()
    print(anomaly_dist)
    print(f"异常比例: {anomaly_dist[1]/len(df):.2%}")
    
    # 可视化
    plt.figure(figsize=(15, 5))
    
    # 负载分布
    plt.subplot(131)
    sns.histplot(data=df, x='load', bins=50)
    plt.title('负载分布')
    
    # 按时间的平均负载
    plt.subplot(132)
    df.groupby('t')['load'].mean().plot()
    plt.title('平均负载随时间变化')
    
    # 异常分布
    plt.subplot(133)
    sns.countplot(data=df, x='has_anomaly')
    plt.title('异常样本分布')
    
    plt.tight_layout()
    plt.savefig('data_visualization.png')
    plt.close()
    
    print("\n5. 数据可视化已保存到 'data_visualization.png'")

if __name__ == "__main__":
    data_path = r'C:\Users\18499\Desktop\porject\nwdaf_data.csv'
    verify_data(data_path)